package com.desksoft.ecommerce.util.html.element.data.select;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.dom4j.Element;

import com.desksoft.ecommerce.util.html.PageXml;
import com.desksoft.ecommerce.util.html.element.QueryElement;
import com.desksoft.ecommerce.util.html.element.query.QueryProcedureElement;
import com.desksoft.ecommerce.util.html.element.query.QuerySqlElement;
import com.desksoft.ecommerce.vo.KeyAndValue;

/***************************************
 * 版权所有：杭州迪科软件 保留所有权利
 * 创建日期: 
 * 创建作者：luoy
 * 文件名称：查询方式获取options
 * 版本：
 * 功能：
 * 最后修改时间：
 * 修改记录：
 *****************************************/
public class QueryOptions extends Options {

	protected QueryElement query;
	protected String value;
	protected String display;
	
	protected PageXml pageXml;
	
	public QueryOptions(Element element,PageXml pageXml) {
		super(element);
		/**
		 * 		<queryOptions value="" display="">	数据库查询下拉框		value:下拉框的值(字段名)		display:下拉框显示值(字段名)
					<queryElement></queryElement>		查询元素
				</queryOptions>
		 */
		this.pageXml = pageXml;
		this.value = element.attributeValue("value");
		this.display = element.attributeValue("display");
		this.query = this.parseQueryElement(element.element("queryElement"));
	}
	
	/**
	 * 解析查询元素
	 * ----	优先使用Sql语句查询
	 */
	public QueryElement parseQueryElement(Element element){
		Element sqlElement = element.element("sqlElement");
		if (sqlElement != null){
			QuerySqlElement querySqlElement = new QuerySqlElement(sqlElement, pageXml);
			return querySqlElement;
		}
		sqlElement = element.element("procedureElement");
		if (sqlElement != null){
			QueryProcedureElement procedureElement = new QueryProcedureElement(sqlElement, pageXml);
			return procedureElement;
		}
		return null;
	}
	
	/**
	 * 注射查询结果
	 * @param list
	 */
	public void setQueryResult(List<Map> list){
		Object v,d;
		this.options = new ArrayList<KeyAndValue<String,String>>();
		for (Map map : list){
			v = map.get(value);if (v == null){v = "";}
			d = map.get(display);if (d == null){d = "";}
			this.options.add(new KeyAndValue<String,String>(v.toString(),d.toString()));
		}
	}
	
	@Override
	public List<KeyAndValue<String, String>> getOptions() {
		return this.options;
	}

	public QueryElement getQuery() {
		return query;
	}

	public void setQuery(QueryElement query) {
		this.query = query;
	}

}
